#ifndef DSPSIMULATOR_FOURREG_H
#define DSPSIMULATOR_FOURREG_H

#include "dspSimulator/operand/operand.h"

class FourReg : public Operand {
private:
    RegKind m_regLo1;
    RegKind m_regLo2;
    RegKind m_regHi1;
    RegKind m_regHi2;
public:
    FourReg(RegKind regLo1, RegKind regLo2, RegKind regHi1, RegKind regHi2) :
            m_regLo1(regLo1), m_regLo2(regLo2), m_regHi1(regHi1), m_regHi2(regHi2), Operand(OperandKind::FOUR_REG) {}

    ~FourReg() override = default;

    std::vector<RegKind> getRegs() const {
        return {m_regLo1, m_regLo2, m_regHi1, m_regHi2};
    }

    std::string toString() override {
        std::string str = RegNames[static_cast<u32>(m_regLo1)];
        str += ":";
        str += RegNames[static_cast<u32>(m_regLo2)];
        str += ":";
        str += RegNames[static_cast<u32>(m_regHi1)];
        str += ":";
        str += RegNames[static_cast<u32>(m_regHi2)];
        return std::move(str);
    }
};

#endif //DSPSIMULATOR_FOURREG_H
